5.12. Иерархия исключений в Groovy
Иерархия исключений в Groovy
Корневой класс:
java.lang.Throwable
Основные ветви (те же, что в Java):
java.lang.Error— фатальные ошибки виртуальной машины (обычно не перехватываются).java.lang.Exception— базовый класс для всех исключений.
Однако в Groovy:
- Нет проверяемых исключений: компилятор Groovy игнорирует механизм
throws, принятый в Java. - Можно вызывать методы, которые в Java объявлены как выбрасывающие
IOException, без блокаtry/catchи без объявленияthrows.
Специфичные исключения Groovy
Помимо стандартных исключений Java, Groovy определяет собственные типы исключений в пакете groovy.lang и других модулях стандартной библиотеки Groovy:
Из groovy.lang:
groovy.lang.GroovyRuntimeException— базовый класс для большинства исключений времени выполнения Groovy.groovy.lang.MissingMethodException— вызов несуществующего метода.groovy.lang.MissingPropertyException— обращение к несуществующему свойству.groovy.lang.ReadOnlyPropertyException— попытка записи в свойство только для чтения.groovy.lang.ScriptException— ошибка при выполнении скрипта.
groovy.lang.GroovyCastException— неудачное приведение типов (например,(Integer)"abc").
Из groovy.json:
groovy.json.JsonExceptiongroovy.json.JsonSlurperException
Из groovy.xml:
groovy.xml.XmlExceptiongroovy.xml.MarkupBuilderException
Из groovy.sql:
groovy.sql.SQLException— обёртка надjava.sql.SQLExceptionс улучшенным сообщением.
Из groovy.transform и метапрограммирования:
groovy.lang.GroovyInterceptableException— при ошибках в перехвате вызовов.groovy.lang.GroovySystemOperationException— при ошибках системного уровня (редко).
Другие:
groovy.util.ResourceException— при работе с ресурсами (например, черезgroovy.util.GroovyScriptEngine).groovy.io.FileException— при операциях с файлами в Groovy-стиле.
Все эти исключения наследуются от
java.lang.RuntimeExceptionилиjava.lang.Exception, но в Groovy они всегда ведут себя как непроверяемые.
Особенности модели исключений в Groovy:
- Динамическая природа языка приводит к частым исключениям вида
MissingMethodExceptionиMissingPropertyExceptionпри опечатках или отсутствии методов/свойств. - Операторы-обёртки: например, использование
?.(safe navigation) или?:(Elvis) помогает избежатьNullPointerException. - Интеграция с Java: можно перехватывать как Java-, так и Groovy-исключения в одном
try/catch.
Пример:
try {
def x = someObject.nonExistentMethod()
} catch (MissingMethodException e) {
println "Метод не найден: ${e.method}"
}
Специфичные и стандартные
Список типов исключений в Groovy включает:
- Все исключения Java (
IOException,NullPointerException,IllegalArgumentExceptionи т.д.). - Специфичные исключения Groovy, преимущественно из пакета
groovy.lang, связанные с динамической природой языка.
Ключевое отличие от Java — отсутствие проверяемых исключений, что упрощает обработку ошибок, но требует большей внимательности при работе с внешними API.